{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1、导包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import lightgbm as lgbm\n",
    "from lightgbm.sklearn import LGBMClassifier\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "import matplotlib.pyplot as plt \n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2、读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>feat_1</th>\n",
       "      <th>feat_2</th>\n",
       "      <th>feat_3</th>\n",
       "      <th>feat_4</th>\n",
       "      <th>feat_5</th>\n",
       "      <th>feat_6</th>\n",
       "      <th>feat_7</th>\n",
       "      <th>feat_8</th>\n",
       "      <th>feat_9</th>\n",
       "      <th>feat_10</th>\n",
       "      <th>feat_11</th>\n",
       "      <th>feat_12</th>\n",
       "      <th>feat_13</th>\n",
       "      <th>feat_14</th>\n",
       "      <th>feat_15</th>\n",
       "      <th>feat_16</th>\n",
       "      <th>feat_17</th>\n",
       "      <th>feat_18</th>\n",
       "      <th>feat_19</th>\n",
       "      <th>feat_20</th>\n",
       "      <th>feat_21</th>\n",
       "      <th>feat_22</th>\n",
       "      <th>feat_23</th>\n",
       "      <th>feat_24</th>\n",
       "      <th>feat_25</th>\n",
       "      <th>feat_26</th>\n",
       "      <th>feat_27</th>\n",
       "      <th>feat_28</th>\n",
       "      <th>feat_29</th>\n",
       "      <th>feat_30</th>\n",
       "      <th>feat_31</th>\n",
       "      <th>feat_32</th>\n",
       "      <th>feat_33</th>\n",
       "      <th>feat_34</th>\n",
       "      <th>feat_35</th>\n",
       "      <th>feat_36</th>\n",
       "      <th>feat_37</th>\n",
       "      <th>feat_38</th>\n",
       "      <th>feat_39</th>\n",
       "      <th>feat_40</th>\n",
       "      <th>feat_41</th>\n",
       "      <th>feat_42</th>\n",
       "      <th>feat_43</th>\n",
       "      <th>...</th>\n",
       "      <th>feat_50_tfidf</th>\n",
       "      <th>feat_51_tfidf</th>\n",
       "      <th>feat_52_tfidf</th>\n",
       "      <th>feat_53_tfidf</th>\n",
       "      <th>feat_54_tfidf</th>\n",
       "      <th>feat_55_tfidf</th>\n",
       "      <th>feat_56_tfidf</th>\n",
       "      <th>feat_57_tfidf</th>\n",
       "      <th>feat_58_tfidf</th>\n",
       "      <th>feat_59_tfidf</th>\n",
       "      <th>feat_60_tfidf</th>\n",
       "      <th>feat_61_tfidf</th>\n",
       "      <th>feat_62_tfidf</th>\n",
       "      <th>feat_63_tfidf</th>\n",
       "      <th>feat_64_tfidf</th>\n",
       "      <th>feat_65_tfidf</th>\n",
       "      <th>feat_66_tfidf</th>\n",
       "      <th>feat_67_tfidf</th>\n",
       "      <th>feat_68_tfidf</th>\n",
       "      <th>feat_69_tfidf</th>\n",
       "      <th>feat_70_tfidf</th>\n",
       "      <th>feat_71_tfidf</th>\n",
       "      <th>feat_72_tfidf</th>\n",
       "      <th>feat_73_tfidf</th>\n",
       "      <th>feat_74_tfidf</th>\n",
       "      <th>feat_75_tfidf</th>\n",
       "      <th>feat_76_tfidf</th>\n",
       "      <th>feat_77_tfidf</th>\n",
       "      <th>feat_78_tfidf</th>\n",
       "      <th>feat_79_tfidf</th>\n",
       "      <th>feat_80_tfidf</th>\n",
       "      <th>feat_81_tfidf</th>\n",
       "      <th>feat_82_tfidf</th>\n",
       "      <th>feat_83_tfidf</th>\n",
       "      <th>feat_84_tfidf</th>\n",
       "      <th>feat_85_tfidf</th>\n",
       "      <th>feat_86_tfidf</th>\n",
       "      <th>feat_87_tfidf</th>\n",
       "      <th>feat_88_tfidf</th>\n",
       "      <th>feat_89_tfidf</th>\n",
       "      <th>feat_90_tfidf</th>\n",
       "      <th>feat_91_tfidf</th>\n",
       "      <th>feat_92_tfidf</th>\n",
       "      <th>feat_93_tfidf</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.016393</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.026316</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.046512</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.045455</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.015209</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>0.030303</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.028986</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.009524</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.02439</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.121951</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.056426</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.188676</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.766794</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.055352</td>\n",
       "      <td>0.103011</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.084053</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.317087</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.080464</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.193174</td>\n",
       "      <td>0.082123</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.075886</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.013158</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0625</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.045455</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.294616</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.207923</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.153726</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.547269</td>\n",
       "      <td>0.262161</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.262647</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.330348</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.013158</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.023256</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.041667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.283780</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.796107</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.406298</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.362081</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0.016393</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.014286</td>\n",
       "      <td>0.315789</td>\n",
       "      <td>0.1</td>\n",
       "      <td>0.131579</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>0.026316</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.013889</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.027027</td>\n",
       "      <td>0.023256</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.026616</td>\n",
       "      <td>0.066667</td>\n",
       "      <td>0.060606</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.067114</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.076923</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.012760</td>\n",
       "      <td>0.061252</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.024929</td>\n",
       "      <td>0.014268</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.024757</td>\n",
       "      <td>0.011435</td>\n",
       "      <td>0.033355</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.040855</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.023749</td>\n",
       "      <td>0.011377</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.011398</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.014224</td>\n",
       "      <td>0.012094</td>\n",
       "      <td>0.036409</td>\n",
       "      <td>0.036525</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.460983</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.008244</td>\n",
       "      <td>0.022456</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.093023</td>\n",
       "      <td>0.0000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.003802</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.027778</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.284569</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.090900</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.142006</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.396422</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.634471</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.203001</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.124622</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.145988</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id    feat_1  feat_2      ...        feat_91_tfidf  feat_92_tfidf  feat_93_tfidf\n",
       "0   1  0.016393     0.0      ...                  0.0            0.0            0.0\n",
       "1   2  0.000000     0.0      ...                  0.0            0.0            0.0\n",
       "2   3  0.000000     0.0      ...                  0.0            0.0            0.0\n",
       "3   4  0.016393     0.0      ...                  0.0            0.0            0.0\n",
       "4   5  0.000000     0.0      ...                  0.0            0.0            0.0\n",
       "\n",
       "[5 rows x 188 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "train1 = pd.read_csv(dpath + 'Otto_FE_train_org.csv')\n",
    "train2 = pd.read_csv(dpath + 'Otto_FE_train_tfidf.csv')\n",
    "\n",
    "train2 = train2.drop(['id','target'],axis=1)\n",
    "train = pd.concat([train1,train2],axis=1,ignore_index=False)\n",
    "train.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "del train1\n",
    "del train2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3、准备数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['target']\n",
    "y_train = y_train.map(lambda s: s[6])\n",
    "y_train = y_train.map(lambda s: int(s)-1) #0-8\n",
    "X_train = train.drop(['id','target'],axis=1)\n",
    "feat_names = X_train.columns\n",
    "\n",
    "from scipy.sparse import csr_matrix\n",
    "X_train = csr_matrix(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4、超参数调优\n",
    "\n",
    "1、树的数目n_estimators 和 学习率 learning_rate\n",
    "2、树的最大深度max_depth 和 树的最大叶子节点数目num_leaves（注意：XGBoost只有max_depth，LightGBM采用叶子优先的方式生成树，num_leaves很重要，设置成比 2^max_depth 小）\n",
    "3、叶子结点的最小样本数:min_data_in_leaf(min_data, min_child_samples)\n",
    "4、每棵树的列采样比例：feature_fraction/colsample_bytree\n",
    "5、每棵树的行采样比例：bagging_fraction （需同时设置bagging_freq=1）/subsample\n",
    "6、正则化参数lambda_l1(reg_alpha), lambda_l2(reg_lambda)\n",
    "7、两个非模型复杂度参数，但会影响模型速度和精度。可根据特征取值范围和样本数目修改这两个参数 1）特征的最大bin数目max_bin：默认255； 2）用来建立直方图的样本数目subsample_for_bin：默认200000。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "MAX_ROUNDS = 10000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import StratifiedKFold\n",
    "kfold = StratifiedKFold(n_splits=3,shuffle=True,random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4.1、n_estimators 调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_n_estimators(params,X_train,y_train,early_stopping_rounds=10):\n",
    "    lgbm_params = params.copy()\n",
    "    lgbm_params['num_class'] =9\n",
    "    lgbmtrain = lgbm.Dataset(X_train,y_train)\n",
    "    \n",
    "    cvresult = lgbm.cv(lgbm_params,lgbmtrain,num_boost_round=MAX_ROUNDS,nfold=3,metrics='multi_logloss',\n",
    "                      early_stopping_rounds=early_stopping_rounds,seed=3)\n",
    "    print('best_n_estimators:' ,len(cvresult['multi_logloss-mean']))\n",
    "    print('best cv score:',cvresult['multi_logloss-mean'][-1])\n",
    "    \n",
    "    return len(cvresult['multi_logloss-mean'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best_n_estimators: 361\n",
      "best cv score: 0.47752848030508294\n"
     ]
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 16,\n",
    "        'learning_rate': 0.1,\n",
    "        'num_leaves': 60,\n",
    "        'max_depth': 6,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        'subsample': 0.7,\n",
    "        'bagging_freq': 1,\n",
    "        'colsample_bytree': 0.7,\n",
    "        }\n",
    "n_estimators_1 = get_n_estimators(params,X_train,y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4.2、num_leaves & max_depth"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 16 candidates, totalling 48 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done  10 tasks      | elapsed:  1.2min\n",
      "[Parallel(n_jobs=4)]: Done  48 out of  48 | elapsed:  7.9min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_freq=1, boosting_type='gbdt', class_weight=None,\n",
       "        colsample_bytree=0.7, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=-1, min_child_samples=20,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=361,\n",
       "        n_jobs=10, num_class=9, num_leaves=31, objective='multiclass',\n",
       "        random_state=None, reg_alpha=0.0, reg_lambda=0.0, silent=False,\n",
       "        subsample=0.7, subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=4,\n",
       "       param_grid={'num_leaves': range(50, 90, 10), 'max_depth': range(5, 9)},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 10,\n",
    "        'learning_rate': 0.1,\n",
    "        'n_estimators': n_estimators_1,\n",
    "        #'num_leaves': 60,\n",
    "        #'max_depth': 6,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        'subsample': 0.7,\n",
    "        'bagging_freq': 1,\n",
    "        'colsample_bytree': 0.7,\n",
    "        'num_class':9\n",
    "        }\n",
    "lgbm_c = LGBMClassifier(silent=False,**params)\n",
    "num_leaves_s = range(50,90,10)#50,60,70,80\n",
    "max_depth_s = range(5,9,1)#5,6,7,8\n",
    "tuned_params = dict(num_leaves=num_leaves_s,max_depth=max_depth_s)\n",
    "grid_search = GridSearchCV(lgbm_c,n_jobs=4,param_grid=tuned_params,cv=kfold,scoring='neg_log_loss',verbose=5,refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best score: 0.4754959079269488\n",
      "best params: {'max_depth': 7, 'num_leaves': 80}\n"
     ]
    }
   ],
   "source": [
    "print('best score:',-grid_search.best_score_)\n",
    "print('best params:',grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAELCAYAAADz6wBxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xt8VNW9///XZyaThNyQq4CAQSreAAEjihZFwXppD62nWkHtT+05pd9Wf9bTatXTc9pj29Na7a/aC22P31bbWm9Va0utRyEK4h2DRkRoFRUwXARRIBfIbT6/P/bOMAmTZMhkSALv5+ORR2bvvfbea82G/claa++1zN0RERHpqkhPZ0BERPo2BRIREcmIAomIiGREgURERDKiQCIiIhlRIBERkYwokIiISEYUSEREJCMKJCIikpGcns7A/jB48GAvLS3t6WyIiPQpy5cv/8Ddh3SW7qAIJKWlpVRUVPR0NkRE+hQzW5dOOjVtiYhIRhRIREQkIwokIiKSkYOij0REuqaxsZGqqip2797d01mRLMrPz2fkyJHEYrEu7a9AIiLtqqqqori4mNLSUsysp7MjWeDubNu2jaqqKsaMGdOlY6hpS0TatXv3bgYNGqQgcgAzMwYNGpRRrVOBREQ6pCBy4Mv0GqtpqwM3/fUNVm3c2dPZEOkxV07uR+7Wmp7OhnRRv1iUEYf0y/p5VCMREZGMqEbSgW//03E9nQWRHrV69WrGDinq0Txs376de++9l6985Sv7vO/tt9/OvHnzKCgoyELOMjNjxgx+9KMfUVZWts/7/vnPf2bcuHEce+yxHR5r7dq19Bt+DEcddRQAJ598Mr/61a8yz3wbWa2RmNk5ZvYPM1tjZjd0kO4CM3MzKwuXY2b2OzN73cxWm9mN4fp8M1tmZq+Z2RtmdlM28y8iPW/79u384he/6NK+t99+O3V1dd2co5735z//mVWrVqWVduzYsVRWVlJZWZmVIAJZrJGYWRSYD5wFVAEvm9kCd1/VJl0xcDXwUtLqC4E8d59gZgXAKjO7D1gHnOnuNWYWA541s/919xezVQ4RCWSjz/DYESWd1vxvuOEG3n77bSZNmsRZZ53F0KFD+eMf/0h9fT3nn38+N910E7W1tXzuc5+jqqqK5uZm/vM//5P333+fjRs3csYZZzB48GAWL16c8vhFRUVceeWVlJeXM2DAAL7//e/zjW98g/Xr13P77bcze/Zs1q5dy+c//3lqa2sB+PnPf84pp5zCI488wvz581m0aBGbN2/m9NNPZ+nSpQwbNmyv8+zatYsrrriCVatWccwxx7Br167EtoULF/Ltb3+b+vp6xo4dy1133UVRURGlpaVcdNFFibzfe++9bNmyhQULFvD000/zve99j4cffhiABx98kK985Sts376d3/zmN0yfPr1L16QrslkjmQqscfd33L0BuB/4dIp03wVuAZKfPXOg0MxygH5AA7DTAy09f7Hwx7NVABHpeTfffHPir+qzzjqLt956i2XLllFZWcny5ctZunQpjz/+OCNGjOC1115j5cqVnHPOOVx99dWMGDGCxYsXtxtEAGpra5kxYwbLly+nuLiY//iP/2DRokU88sgjfOtb3wJg6NChLFq0iFdeeYUHHniAq6++GoDzzz+fYcOGMX/+fL74xS9y0003pQwiAL/85S8pKChgxYoVfPOb32T58uUAfPDBB3zve9+jvLycV155hbKyMn784x8n9ispKWHZsmVcddVVXHPNNZxyyinMnj2bW2+9lcrKSsaOHQtAU1MTy5Yt4/bbb+emm/Y01rz77rtMnjyZ008/nWeeeSazi9GObPaRHAa8l7RcBZyUnMDMJgOj3P1RM7s2adNDBEFnE1AA/Ju7fxjuEwWWAx8D5rt7ck1GRLKkN/QZLly4kIULFzJ58mQAampqeOutt5g+fTrXXnst119/PZ/61Kf26a/x3NxczjnnHAAmTJhAXl4esViMCRMmsHbtWiB4w/+qq66isrKSaDTKm2++mdj/Zz/7GePHj+fkk09m7ty57Z5n6dKliQA0ceJEJk6cCMCLL77IqlWrOPXUUwFoaGhg2rRpif1ajjl37lz+7d/+rd3j//M//zMAJ5xwQiLfw4cPZ/369QwaNIjly5fzmc98hjfeeIOSkpK0v590ZDOQpHowOVF7MLMIcBtweYp0U4FmYAQwAHjGzMrD2k0zMMnMDgEeMbPx7r5yr5ObzQPmAYwePTrTsohIL+Du3HjjjXzpS1/aa9vy5ct57LHHuPHGG/nEJz6RqE10JhaLJd6jiEQi5OXlJT43NTUBcNttt3HooYfy2muvEY/Hyc/PT+y/YcMGIpEI77//PvF4nEik/YaeVO9ruDtnnXUW9913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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid_search.cv_results_['mean_test_score']\n",
    "test_scores = np.array(test_means).reshape(len(max_depth_s),len(num_leaves_s))\n",
    "for i,value in enumerate(max_depth_s):\n",
    "    plt.plot(num_leaves_s,-test_scores[i],label='test_max_depth' + str(value))\n",
    "    \n",
    "plt.legend()\n",
    "plt.xlabel('num_leaves')\n",
    "plt.ylabel('Log loss')\n",
    "#plt.show()\n",
    "plt.savefig('max_depth_and_num_leaves_1.png')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.4832262 , -0.4832262 , -0.4832262 , -0.4832262 , -0.47677815,\n",
       "       -0.47682758, -0.47709714, -0.47709714, -0.47623562, -0.47629138,\n",
       "       -0.47607199, -0.47549591, -0.47873254, -0.47852768, -0.47977737,\n",
       "       -0.47931446])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_means"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4.2-2、max_depth=7,再调num_leaves"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 3 candidates, totalling 9 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done   4 out of   9 | elapsed:   51.7s remaining:  1.1min\n",
      "[Parallel(n_jobs=4)]: Done   6 out of   9 | elapsed:  1.4min remaining:   42.4s\n",
      "[Parallel(n_jobs=4)]: Done   9 out of   9 | elapsed:  1.6min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_freq=1, boosting_type='gbdt', class_weight=None,\n",
       "        colsample_bytree=0.7, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=7, min_child_samples=20,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=361,\n",
       "        n_jobs=10, num_class=9, num_leaves=31, objective='multiclass',\n",
       "        random_state=None, reg_alpha=0.0, reg_lambda=0.0, silent=False,\n",
       "        subsample=0.7, subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=4,\n",
       "       param_grid={'num_leaves': range(70, 100, 10)},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 10,\n",
    "        'learning_rate': 0.1,\n",
    "        'n_estimators': n_estimators_1,\n",
    "        #'num_leaves': 60,\n",
    "        'max_depth': 7,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        'subsample': 0.7,\n",
    "        'bagging_freq': 1,\n",
    "        'colsample_bytree': 0.7,\n",
    "        'num_class':9\n",
    "        }\n",
    "lgbm_c = LGBMClassifier(silent=False,**params)\n",
    "num_leaves_s = range(70,100,10)#70,80，90\n",
    "#max_depth_s = range(5,9,1)#5,6,7,8\n",
    "tuned_params = dict(num_leaves=num_leaves_s)\n",
    "grid_search = GridSearchCV(lgbm_c,n_jobs=4,param_grid=tuned_params,cv=kfold,scoring='neg_log_loss',verbose=5,refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best score: 0.4754959079270351\n",
      "best params: {'num_leaves': 80}\n"
     ]
    }
   ],
   "source": [
    "print('best score:',-grid_search.best_score_)\n",
    "print('best params:',grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid_search.cv_results_['mean_test_score']\n",
    "#test_scores = np.array(test_means).reshape(len(max_depth_s),len(num_leaves_s))\n",
    "#for i,value in enumerate(max_depth_s):\n",
    " #   plt.plot(num_leaves_s,-test_scores[i],label='test_max_depth' + str(value))\n",
    "plt.plot(num_leaves_s,-test_means)    \n",
    "#plt.legend()\n",
    "plt.xlabel('num_leaves')\n",
    "plt.ylabel('Log loss')\n",
    "#plt.show()\n",
    "plt.savefig('max_depth_and_num_leaves_2.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.47607199, -0.47549591, -0.47595085])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_means"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "max_depth=7,num_leaves=80"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4.3、调优min_child_samples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 4 candidates, totalling 12 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done   8 out of  12 | elapsed:  1.9min remaining:   55.6s\n",
      "[Parallel(n_jobs=4)]: Done  12 out of  12 | elapsed:  2.3min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_freq=1, boosting_type='gbdt', class_weight=None,\n",
       "        colsample_bytree=0.7, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=7, min_child_samples=20,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=361,\n",
       "        n_jobs=10, num_class=9, num_leaves=80, objective='multiclass',\n",
       "        random_state=None, reg_alpha=0.0, reg_lambda=0.0, silent=False,\n",
       "        subsample=0.7, subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=4,\n",
       "       param_grid={'min_child_samples': range(10, 50, 10)},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 10,\n",
    "        'learning_rate': 0.1,\n",
    "        'n_estimators': n_estimators_1,\n",
    "        'num_leaves': 80,\n",
    "        'max_depth': 7,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        'subsample': 0.7,\n",
    "        'bagging_freq': 1,\n",
    "        'colsample_bytree': 0.7,\n",
    "        'num_class':9\n",
    "        }\n",
    "lgbm_c = LGBMClassifier(silent=False,**params)\n",
    "\n",
    "min_child_samples_s = range(10,50,10)#10.20,30,40\n",
    "tuned_params = dict(min_child_samples=min_child_samples_s)\n",
    "\n",
    "grid_search = GridSearchCV(lgbm_c,n_jobs=4,param_grid=tuned_params,cv=kfold,scoring='neg_log_loss',verbose=5,refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best score: 0.4739307622632796\n",
      "best params: {'min_child_samples': 40}\n"
     ]
    }
   ],
   "source": [
    "print('best score:',-grid_search.best_score_)\n",
    "print('best params:',grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid_search.cv_results_[ 'mean_test_score' ]\n",
    "plt.plot(min_child_samples_s, -test_means)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 4 candidates, totalling 12 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done   8 out of  12 | elapsed:  1.5min remaining:   44.5s\n",
      "[Parallel(n_jobs=4)]: Done  12 out of  12 | elapsed:  2.0min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_freq=1, boosting_type='gbdt', class_weight=None,\n",
       "        colsample_bytree=0.7, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=7, min_child_samples=20,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=361,\n",
       "        n_jobs=10, num_class=9, num_leaves=80, objective='multiclass',\n",
       "        random_state=None, reg_alpha=0.0, reg_lambda=0.0, silent=False,\n",
       "        subsample=0.7, subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=4,\n",
       "       param_grid={'min_child_samples': range(30, 70, 10)},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 10,\n",
    "        'learning_rate': 0.1,\n",
    "        'n_estimators': n_estimators_1,\n",
    "        'num_leaves': 80,\n",
    "        'max_depth': 7,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        'subsample': 0.7,\n",
    "        'bagging_freq': 1,\n",
    "        'colsample_bytree': 0.7,\n",
    "        'num_class':9\n",
    "        }\n",
    "lgbm_c = LGBMClassifier(silent=False,**params)\n",
    "\n",
    "min_child_samples_s = range(30,70,10)#30,40,50.60\n",
    "tuned_params = dict(min_child_samples=min_child_samples_s)\n",
    "\n",
    "grid_search = GridSearchCV(lgbm_c,n_jobs=4,param_grid=tuned_params,cv=kfold,scoring='neg_log_loss',verbose=5,refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best score: 0.4739307622632796\n",
      "best params: {'min_child_samples': 40}\n"
     ]
    }
   ],
   "source": [
    "print('best score:',-grid_search.best_score_)\n",
    "print('best params:',grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid_search.cv_results_[ 'mean_test_score' ]\n",
    "plt.plot(min_child_samples_s, -test_means)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "min_child_samples=40"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4.4、行采样参数 sub_samples/bagging_fraction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 5 candidates, totalling 15 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done  12 out of  15 | elapsed:  1.7min remaining:   24.9s\n",
      "[Parallel(n_jobs=4)]: Done  15 out of  15 | elapsed:  2.1min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_freq=1, boosting_type='gbdt', class_weight=None,\n",
       "        colsample_bytree=0.7, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=7, min_child_samples=40,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=361,\n",
       "        n_jobs=10, num_class=9, num_leaves=80, objective='multiclass',\n",
       "        random_state=None, reg_alpha=0.0, reg_lambda=0.0, silent=False,\n",
       "        subsample=1.0, subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=4,\n",
       "       param_grid={'subsample': [0.5, 0.6, 0.7, 0.8, 0.9]},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 10,\n",
    "        'learning_rate': 0.1,\n",
    "        'n_estimators': n_estimators_1,\n",
    "        'max_depth': 7,\n",
    "        'num_leaves': 80,\n",
    "        'min_child_samples':40,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        #'subsample': 0.7,\n",
    "        'bagging_freq': 1,\n",
    "        'colsample_bytree': 0.7,\n",
    "        'num_class':9\n",
    "        \n",
    "        }\n",
    "lgbm_c = LGBMClassifier(silent=False,**params)\n",
    "\n",
    "subsample_s = [i/10.0 for i in range(5,10)]#0.5,0.6,0.7,0.8,0.9\n",
    "tuned_params = dict(subsample=subsample_s)\n",
    "\n",
    "grid_search = GridSearchCV(lgbm_c,n_jobs=4,param_grid=tuned_params,cv=kfold,scoring='neg_log_loss',verbose=5,refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best score: 0.47373404348362574\n",
      "best params: {'subsample': 0.8}\n"
     ]
    }
   ],
   "source": [
    "print('best score:',-grid_search.best_score_)\n",
    "print('best params:',grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid_search.cv_results_[ 'mean_test_score' ]\n",
    "plt.plot(subsample_s, -test_means)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.4770234 , -0.47541982, -0.47393076, -0.47373404, -0.47570267])"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_means"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "subsample=0.8"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4.5、列采样参数 sub_feature/feature_fraction/colsample_bytree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 5 candidates, totalling 15 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done  12 out of  15 | elapsed:  2.3min remaining:   34.4s\n",
      "[Parallel(n_jobs=4)]: Done  15 out of  15 | elapsed:  2.7min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_freq=1, boosting_type='gbdt', class_weight=None,\n",
       "        colsample_bytree=1.0, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=7, min_child_samples=40,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=361,\n",
       "        n_jobs=10, num_class=9, num_leaves=80, objective='multiclass',\n",
       "        random_state=None, reg_alpha=0.0, reg_lambda=0.0, silent=False,\n",
       "        subsample=0.8, subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=4,\n",
       "       param_grid={'colsample_bytree': [0.5, 0.6, 0.7, 0.8, 0.9]},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 10,\n",
    "        'learning_rate': 0.1,\n",
    "        'n_estimators': n_estimators_1,\n",
    "        'max_depth': 7,\n",
    "        'num_leaves': 80,\n",
    "        'min_child_samples':40,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        'subsample': 0.8,\n",
    "        'bagging_freq': 1,\n",
    "        #'colsample_bytree': 0.7,\n",
    "        'num_class':9\n",
    "        \n",
    "        }\n",
    "lgbm_c = LGBMClassifier(silent=False,**params)\n",
    "\n",
    "colsample_bytree_s = [i/10.0 for i in range(5,10)]#0.5,0.6,0.7,0.8,0.9\n",
    "tuned_params = dict(colsample_bytree=colsample_bytree_s)\n",
    "\n",
    "grid_search = GridSearchCV(lgbm_c,n_jobs=4,param_grid=tuned_params,cv=kfold,scoring='neg_log_loss',verbose=5,refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best score: 0.4729089552592097\n",
      "best params: {'colsample_bytree': 0.5}\n"
     ]
    }
   ],
   "source": [
    "print('best score:',-grid_search.best_score_)\n",
    "print('best params:',grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid_search.cv_results_[ 'mean_test_score' ]\n",
    "plt.plot(colsample_bytree_s, -test_means)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "还需要调小一些"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 4 candidates, totalling 12 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done   8 out of  12 | elapsed:  1.5min remaining:   44.9s\n",
      "[Parallel(n_jobs=4)]: Done  12 out of  12 | elapsed:  2.0min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "       error_score='raise-deprecating',\n",
       "       estimator=LGBMClassifier(bagging_freq=1, boosting_type='gbdt', class_weight=None,\n",
       "        colsample_bytree=1.0, importance_type='split', learning_rate=0.1,\n",
       "        max_bin=127, max_depth=7, min_child_samples=40,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=361,\n",
       "        n_jobs=10, num_class=9, num_leaves=80, objective='multiclass',\n",
       "        random_state=None, reg_alpha=0.0, reg_lambda=0.0, silent=False,\n",
       "        subsample=0.8, subsample_for_bin=200000, subsample_freq=0),\n",
       "       fit_params=None, iid='warn', n_jobs=4,\n",
       "       param_grid={'colsample_bytree': [0.3, 0.4, 0.5, 0.6]},\n",
       "       pre_dispatch='2*n_jobs', refit=False, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 10,\n",
    "        'learning_rate': 0.1,\n",
    "        'n_estimators': n_estimators_1,\n",
    "        'max_depth': 7,\n",
    "        'num_leaves': 80,\n",
    "        'min_child_samples':40,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        'subsample': 0.8,\n",
    "        'bagging_freq': 1,\n",
    "        #'colsample_bytree': 0.7,\n",
    "        'num_class':9\n",
    "        \n",
    "        }\n",
    "lgbm_c = LGBMClassifier(silent=False,**params)\n",
    "\n",
    "colsample_bytree_s = [i/10.0 for i in range(3,7)]#0.3,0.4,0.5,0.6\n",
    "tuned_params = dict(colsample_bytree=colsample_bytree_s)\n",
    "\n",
    "grid_search = GridSearchCV(lgbm_c,n_jobs=4,param_grid=tuned_params,cv=kfold,scoring='neg_log_loss',verbose=5,refit=False)\n",
    "grid_search.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best score: 0.4729089552592097\n",
      "best params: {'colsample_bytree': 0.5}\n"
     ]
    }
   ],
   "source": [
    "print('best score:',-grid_search.best_score_)\n",
    "print('best params:',grid_search.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid_search.cv_results_[ 'mean_test_score' ]\n",
    "plt.plot(colsample_bytree_s, -test_means)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.47336859, -0.47301409, -0.47290896, -0.47315853])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_means"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "colsample_bytree=0.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4.6、减小学习率，调整n_estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best_n_estimators: 1857\n",
      "best cv score: 0.46626558966316817\n"
     ]
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 30,\n",
    "        'learning_rate': 0.02,\n",
    "        #'n_estimators': n_estimators_1,\n",
    "        'max_depth': 7,\n",
    "        'num_leaves': 80,\n",
    "        'min_child_samples':40,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        'subsample': 0.8,\n",
    "        'bagging_freq': 1,\n",
    "        'colsample_bytree': 0.5,\n",
    "        #'num_class':9\n",
    "        }\n",
    "n_estimators_2 = get_n_estimators(params,X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best_n_estimators: 3589\n",
      "best cv score: 0.4657954513000279\n"
     ]
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 30,\n",
    "        'learning_rate': 0.01,\n",
    "        #'n_estimators': n_estimators_1,\n",
    "        'max_depth': 7,\n",
    "        'num_leaves': 80,\n",
    "        'min_child_samples':40,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        'subsample': 0.8,\n",
    "        'bagging_freq': 1,\n",
    "        'colsample_bytree': 0.5,\n",
    "        #'num_class':9\n",
    "        }\n",
    "n_estimators_3 = get_n_estimators(params,X_train,y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4.7、用所有数据，采用最佳参数进行训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LGBMClassifier(bagging_freq=1, boosting_type='gbdt', class_weight=None,\n",
       "        colsample_bytree=0.5, importance_type='split', learning_rate=0.01,\n",
       "        max_bin=127, max_depth=7, min_child_samples=40,\n",
       "        min_child_weight=0.001, min_split_gain=0.0, n_estimators=3589,\n",
       "        n_jobs=30, num_class=9, num_leaves=80, objective='multiclass',\n",
       "        random_state=None, reg_alpha=0.0, reg_lambda=0.0, silent=False,\n",
       "        subsample=0.8, subsample_for_bin=200000, subsample_freq=0)"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "params = {\n",
    "        'boosting_type': 'gbdt',\n",
    "        'objective': 'multiclass',\n",
    "        'n_jobs': 30,\n",
    "        'learning_rate': 0.01,\n",
    "        'n_estimators': n_estimators_3,\n",
    "        'max_depth': 7,\n",
    "        'num_leaves': 80,\n",
    "        'min_child_samples':40,\n",
    "        'max_bin': 127, #2^6,原始特征为整数，很少超过100\n",
    "        'subsample': 0.8,\n",
    "        'bagging_freq': 1,\n",
    "        'colsample_bytree': 0.5,\n",
    "        'num_class':9\n",
    "        }\n",
    "lgbm_c = LGBMClassifier(silent=False, **params)\n",
    "lgbm_c.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4.8、保存模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "pickle.dump(lgbm_c,open('Otto_LightGBM_org_tfidf_gbdt.pkl', 'wb'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4.9、特征重要性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame({\"columns\":list(feat_names), \"importance\":list(lgbm_c.feature_importances_.T)})\n",
    "df = df.sort_values(by=['importance'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>importance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>feat_67_tfidf</td>\n",
       "      <td>37305</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>117</th>\n",
       "      <td>feat_25_tfidf</td>\n",
       "      <td>36538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>116</th>\n",
       "      <td>feat_24_tfidf</td>\n",
       "      <td>34326</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>feat_48_tfidf</td>\n",
       "      <td>33453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>132</th>\n",
       "      <td>feat_40_tfidf</td>\n",
       "      <td>32358</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>178</th>\n",
       "      <td>feat_86_tfidf</td>\n",
       "      <td>29924</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>106</th>\n",
       "      <td>feat_14_tfidf</td>\n",
       "      <td>28463</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>154</th>\n",
       "      <td>feat_62_tfidf</td>\n",
       "      <td>23030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>feat_15_tfidf</td>\n",
       "      <td>21295</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>feat_16_tfidf</td>\n",
       "      <td>20342</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>feat_33_tfidf</td>\n",
       "      <td>20254</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>156</th>\n",
       "      <td>feat_64_tfidf</td>\n",
       "      <td>20060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>feat_67</td>\n",
       "      <td>19842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126</th>\n",
       "      <td>feat_34_tfidf</td>\n",
       "      <td>19659</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>134</th>\n",
       "      <td>feat_42_tfidf</td>\n",
       "      <td>19602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>180</th>\n",
       "      <td>feat_88_tfidf</td>\n",
       "      <td>19513</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>146</th>\n",
       "      <td>feat_54_tfidf</td>\n",
       "      <td>17124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>164</th>\n",
       "      <td>feat_72_tfidf</td>\n",
       "      <td>17075</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100</th>\n",
       "      <td>feat_8_tfidf</td>\n",
       "      <td>16458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>feat_24</td>\n",
       "      <td>16331</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>152</th>\n",
       "      <td>feat_60_tfidf</td>\n",
       "      <td>15953</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>feat_32_tfidf</td>\n",
       "      <td>15775</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>feat_48</td>\n",
       "      <td>15164</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>162</th>\n",
       "      <td>feat_70_tfidf</td>\n",
       "      <td>14826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>feat_25</td>\n",
       "      <td>14660</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128</th>\n",
       "      <td>feat_36_tfidf</td>\n",
       "      <td>14541</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>135</th>\n",
       "      <td>feat_43_tfidf</td>\n",
       "      <td>14049</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>167</th>\n",
       "      <td>feat_75_tfidf</td>\n",
       "      <td>13772</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>feat_40</td>\n",
       "      <td>13617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>feat_14</td>\n",
       "      <td>13375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>153</th>\n",
       "      <td>feat_61_tfidf</td>\n",
       "      <td>1971</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>feat_30</td>\n",
       "      <td>1886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>feat_65</td>\n",
       "      <td>1809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>176</th>\n",
       "      <td>feat_84_tfidf</td>\n",
       "      <td>1766</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>feat_29</td>\n",
       "      <td>1742</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>feat_6_tfidf</td>\n",
       "      <td>1725</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>feat_3</td>\n",
       "      <td>1620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>feat_21</td>\n",
       "      <td>1620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>feat_19</td>\n",
       "      <td>1466</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>feat_46</td>\n",
       "      <td>1453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>feat_23</td>\n",
       "      <td>1444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>feat_45</td>\n",
       "      <td>1404</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>feat_77</td>\n",
       "      <td>1365</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>62</th>\n",
       "      <td>feat_63</td>\n",
       "      <td>1347</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>feat_49</td>\n",
       "      <td>1347</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>feat_52</td>\n",
       "      <td>1315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>feat_7</td>\n",
       "      <td>1287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>feat_12</td>\n",
       "      <td>1222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>feat_51_tfidf</td>\n",
       "      <td>1122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>feat_2</td>\n",
       "      <td>1114</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>92</th>\n",
       "      <td>feat_93</td>\n",
       "      <td>1078</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>feat_28</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>feat_31</td>\n",
       "      <td>1013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>feat_5</td>\n",
       "      <td>925</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80</th>\n",
       "      <td>feat_81</td>\n",
       "      <td>806</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>feat_61</td>\n",
       "      <td>635</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>81</th>\n",
       "      <td>feat_82</td>\n",
       "      <td>528</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>83</th>\n",
       "      <td>feat_84</td>\n",
       "      <td>381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>feat_6</td>\n",
       "      <td>363</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>feat_51</td>\n",
       "      <td>243</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>186 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           columns  importance\n",
       "159  feat_67_tfidf       37305\n",
       "117  feat_25_tfidf       36538\n",
       "116  feat_24_tfidf       34326\n",
       "140  feat_48_tfidf       33453\n",
       "132  feat_40_tfidf       32358\n",
       "178  feat_86_tfidf       29924\n",
       "106  feat_14_tfidf       28463\n",
       "154  feat_62_tfidf       23030\n",
       "107  feat_15_tfidf       21295\n",
       "108  feat_16_tfidf       20342\n",
       "125  feat_33_tfidf       20254\n",
       "156  feat_64_tfidf       20060\n",
       "66         feat_67       19842\n",
       "126  feat_34_tfidf       19659\n",
       "134  feat_42_tfidf       19602\n",
       "180  feat_88_tfidf       19513\n",
       "146  feat_54_tfidf       17124\n",
       "164  feat_72_tfidf       17075\n",
       "100   feat_8_tfidf       16458\n",
       "23         feat_24       16331\n",
       "152  feat_60_tfidf       15953\n",
       "124  feat_32_tfidf       15775\n",
       "47         feat_48       15164\n",
       "162  feat_70_tfidf       14826\n",
       "24         feat_25       14660\n",
       "128  feat_36_tfidf       14541\n",
       "135  feat_43_tfidf       14049\n",
       "167  feat_75_tfidf       13772\n",
       "39         feat_40       13617\n",
       "13         feat_14       13375\n",
       "..             ...         ...\n",
       "153  feat_61_tfidf        1971\n",
       "29         feat_30        1886\n",
       "64         feat_65        1809\n",
       "176  feat_84_tfidf        1766\n",
       "28         feat_29        1742\n",
       "98    feat_6_tfidf        1725\n",
       "2           feat_3        1620\n",
       "20         feat_21        1620\n",
       "18         feat_19        1466\n",
       "45         feat_46        1453\n",
       "22         feat_23        1444\n",
       "44         feat_45        1404\n",
       "76         feat_77        1365\n",
       "62         feat_63        1347\n",
       "48         feat_49        1347\n",
       "51         feat_52        1315\n",
       "6           feat_7        1287\n",
       "11         feat_12        1222\n",
       "143  feat_51_tfidf        1122\n",
       "1           feat_2        1114\n",
       "92         feat_93        1078\n",
       "27         feat_28        1024\n",
       "30         feat_31        1013\n",
       "4           feat_5         925\n",
       "80         feat_81         806\n",
       "60         feat_61         635\n",
       "81         feat_82         528\n",
       "83         feat_84         381\n",
       "5           feat_6         363\n",
       "50         feat_51         243\n",
       "\n",
       "[186 rows x 2 columns]"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.bar(range(len(lgbm_c.feature_importances_)), lgbm_c.feature_importances_)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
